package com.huaxin.device.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.huaxin.device.dto.ResponseResult;
import com.huaxin.device.dto.enums.EquipmentStatus;
import com.huaxin.device.dto.request.ElectricalEquipmentCreateReqDTO;
import com.huaxin.device.dto.request.ElectricalEquipmentPageListReqDTO;
import com.huaxin.device.dto.request.ElectricalEquipmentSetMaintenanceReqDTO;
import com.huaxin.device.dto.request.ElectricalEquipmentUpdateReqDTO;
import com.huaxin.device.dto.response.EquipmentStatsRespDTO;
import com.huaxin.device.models.ElectricalEquipment;
import org.springframework.web.bind.annotation.RequestBody;

import java.util.List;

public interface ElectricalEquipmentService extends IService<ElectricalEquipment> {

    /**
     * 创建电力设备
     */
    ResponseResult<ElectricalEquipment> create(ElectricalEquipmentCreateReqDTO in);

    /**
     * 获取电力设备信息
     */
    ElectricalEquipment getByEquipmentId(String id);

    /**
     * 更新电力设备
     */
    ResponseResult<String> update(ElectricalEquipmentUpdateReqDTO in);

    /**
     * 删除电力设备
     */
    ResponseResult<String> delete(String id);

    /**
     * 切换设备状态
     */
    ResponseResult<String> switchStatus(String id, EquipmentStatus status);

    /**
     * 分页查询电力设备
     */
    ResponseResult<IPage<ElectricalEquipment>> pageQuery(ElectricalEquipmentPageListReqDTO in);

    /**
     * 批量设置维保计划
     */
    ResponseResult<String> batchSetMaintenance(@RequestBody ElectricalEquipmentSetMaintenanceReqDTO in);

    /**
     * 根据设备型号ID获取设备列表
     */
    List<ElectricalEquipment> listByModelId(String modelId);

    /**
     * 根据设备类别ID获取设备列表
     */
    List<ElectricalEquipment> listByCategoryId(String categoryId);

    /**
     * 根据配电房ID获取设备列表
     */
    List<ElectricalEquipment> listByRoomId(String roomId);

    /**
     * 根据电井ID获取设备列表
     */
    List<ElectricalEquipment> listByWellId(String wellId);

    /**
     * 根据变电箱ID获取设备列表
     */
    List<ElectricalEquipment> listByCabinetId(String cabinetId);

    /**
     * 获取统计信息
     */
    ResponseResult<EquipmentStatsRespDTO> getStats();
}